#pragma pack(push, 1)
struct MYPHeader {              // sizeof(MYPHeader) = 0x24
 // "MYP\0" signature. It's important to have char array type because of byte-ordering dependence of uint32_t.
 char[4] archive_marker;
 // In Warhammer MYPs version = 5.
 uint32_t archive_version;
 // 0x4E3C23FD or 0xFD23EC43. This field should be checked immediately after checking the archive marker.
 // If byte_order_marker = 0xFD23EC43 then you are running on Little Endian machine and on Big Endian machine otherwise.
 // MYP Archives are always stored in Little Endian format, so if you found this field to be equal to 0x4E3C23FD
 // then you MUST flip bytes (like it does bswap assembly instruction) for most of MYP structures fields. 
 uint32_t byte_order_marker;
 // File offset to the first file table.
 uint64_t first_file_table_offset;
 // Default number of file table entries in a newly created file table. 1000 by default.
 uint32_t default_file_table_size;
 // Total number of stored files in the whole archive.
 uint32_t total_number_of_files;
 // Not sure how it works, but this value should be equal to write_sequence. Needs more reversing. :)
 uint32_t confirmation_sequence;
 // This value is increased every time archive switched to read-only mode after any write operation.
 // If this value reachs maximum UINT_MAX then it's reseted to 0x00000001
 uint32_t write_sequence;
};

